#pragma once
#include "MyAssert.h"

// 动态数组的默认大小
#define DEFAULT_SIZE 10
// 计算数组长度的宏
#define ARRAY_LENGTH(arr) (sizeof(arr) / sizeof((arr)[0]))

// 动态数组中存放的数据类型
typedef int DataType;

typedef struct DynamicArray
{
    // 动态数组中的元素个数
    int size;
    // 动态数组的容量
    int capacity;
    // 动态数组中存放元素的数组
    DataType *datas;
} DynamicArray;

// 创建一个动态数组
DynamicArray *newDynamicArray();

// 输出动态数组信息
void printDynamicArray(DynamicArray* da);

// 创建一个动态数组，并指定大小
DynamicArray* newDynamicArray(int size);

// 创建一个动态数组，并指定初始数据
DynamicArray* newDynamicArray(DataType *datas, int size);

// 向动态数组中添加元素。index 插入的位置，val 插入的值
void insert(DynamicArray *da, int index, DataType val);

// 从动态数组中删除元素。index 删除的位置
void remove(DynamicArray *da, int index);

// 更新动态数组中元素的值。index 更新的位置，newVal 新的值
void update(DynamicArray *da, int index, DataType newVal);

// 查找动态数组中是否存在某个值。val 要查找的值，若不存在返回 -1
int find(DynamicArray *da, DataType val);

// 销毁动态数组
void destroy(DynamicArray *da);